﻿using System;
using System.Collections.Generic;
using HK.Core.Common.Data;
using HK.Core.Common.Protocol.Data;
using HK.Core.Pool.Protocol;
using HK.Core.Utils;
using HK.Editor.GUIEx.Protocol.Data;
using HK.Editor.GUIEx.Protocol.TreeView.Data;
using HK.Editor.Load.Data;

namespace HK.Editor.Load.Protocol.Data
{
    /// <summary>
    /// 接口 : 加载树枝
    /// </summary>
    public interface ILoadBranch : ITreeBranch, IPoolElement, IListElement
    {
        /// <summary>
        /// AssetKey
        /// <para>* 不包含后缀名</para>
        /// </summary>
        string AssetKey { get; }
        
        /// <summary>
        /// 资产类型
        /// </summary>
        AssetFileType AssetType { get; }
        
        /// <summary>
        /// 文件后缀
        /// </summary>
        string Extension { get; }
        
        /// <summary>
        /// 加载源
        /// </summary>
        string From { get; }
        
        /// <summary>
        /// 异步标志位
        /// <para>* true : 异步; false : 同步;</para>
        /// </summary>
        bool Async { get; }
        
        /// <summary>
        /// 文件大小
        /// <para> * 文件的物理大小。单位:Byte</para>
        /// </summary>
        long Size { get; }
        
        /// <summary>
        /// 内存占用大小(即:运存)
        /// <para> * 文件加载的内存消耗。单位:Byte</para>
        /// </summary>
        long MemorySize { get; }
        
        /// <summary>
        /// 引用计数
        /// </summary>
        int ReferenceCount { get; }
        
        /// <summary>
        /// 冷却时间
        /// <para>* 倒计时释放的对象的冷却时间(单位:秒)</para>
        /// </summary>
        float CoolTime { get; }
        
        /// <summary>
        /// 加载耗时
        /// </summary>
        long CostTime { get; }
        
        /// <summary>
        /// 加载时间
        /// </summary>
        long LoadTime { get; }

#region Caller

        /// <summary>
        /// 是否为调用信息
        /// </summary>
        bool IsCaller { get; }

        /// <summary>
        /// 调用处
        /// </summary>
        string Caller { get; }

#endregion

    }
}
